﻿#pragma once
#include <vector>
#include <string>
#include <concepts>
#include <filesystem>

namespace winrt::NovelReader::Service
{
	template<typename T>
	concept WinRTObject = std::derived_from<T,winrt::Windows::Foundation::IInspectable>;

	// 查找 App 资源
	template<WinRTObject T>
	T LookupAppResource(winrt::hstring const& key)
	{
		auto object = winrt::Microsoft::UI::Xaml::Application::Current().Resources().Lookup(winrt::box_value(key)); 
		return object.as<T>(); 
	}

	// 根据 CRLF 字符拆分字符串
	std::vector<std::wstring> SplitTextByCRLF(std::wstring const& text);

	// 判断操作系统是否开启了暗黑模式
	bool IsDarkMode();

	// 检测字符串的编码格式，返回对应的代码页。如果检测失败，返回 -1.
	int32_t GetTextCodePage(std::string const& input);

	// 解码多字节字符串。有效的输入是 UTF-8，或者 GBK 编码的字符串。
	std::wstring ToUtf16(std::string const& multiBytesStr, UINT codePage);

	// 将 UTF16 字符串转换成 UTF-8 字符串
	std::string ToUtf8(std::wstring const& w); 

	// 分割字符串并添加空白行
	std::vector<winrt::hstring> SplitTextAndAddWhiteLines(winrt::hstring const& input, int32_t whiteLines); 

	std::filesystem::path GetCacheFolder();

	std::wstring SimpleHash(std::wstring input);
}